import Message from 'tdesign-miniprogram/message/index';
import userProfileAPI from '~/api/userProfile';

Page({
  data: {
    // 设置项数据
    menuData: [
      [
        {
          title: '账号信息',
          action: 'accountInfo',
          icon: 'user',
        },
        {
          title: '通知设置',
          action: 'notification',
          icon: 'notification',
        },
      ],
      [
        {
          title: '隐私协议',
          action: 'privacy',
          icon: 'secured',
        },
        {
          title: '关于我们',
          action: 'about',
          icon: 'info-circle',
        },
      ],
      [
        {
          title: '清除缓存',
          action: 'clearCache',
          icon: 'delete',
        },
        {
          title: '退出登录',
          action: 'logout',
          icon: 'logout',
        },
      ],
    ],
    // 用户信息
    userInfo: {},
  },

  onLoad() {
    this.loadUserInfo();
  },

  /**
   * 加载用户信息
   */
  loadUserInfo() {
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.setData({ userInfo });
    }
  },

  /**
   * 设置项点击事件
   */
  onEleClick(e) {
    const { action, title } = e.currentTarget.dataset.data;
    
    switch (action) {
      case 'accountInfo':
        this.goAccountInfo();
        break;
      case 'notification':
        this.showNotificationSettings();
        break;
      case 'privacy':
        this.showPrivacySettings();
        break;
      case 'about':
        this.goAbout();
        break;
      case 'clearCache':
        this.clearCache();
        break;
      case 'logout':
        this.logout();
        break;
      default:
        Message.info({
          context: this,
          offset: [20, 32],
          duration: 2000,
          content: `${title} 功能开发中...`
        });
    }
  },

  /**
   * 账号信息
   */
  goAccountInfo() {
    wx.showModal({
      title: '账号信息',
      content: `昵称：${this.data.userInfo.nickName || '未设置'}\n注册时间：${new Date().toLocaleDateString()}`,
      showCancel: false,
      confirmText: '知道了'
    });
  },

  /**
   * 通知设置
   */
  showNotificationSettings() {
    wx.showActionSheet({
      itemList: ['开启推送通知', '关闭推送通知', '仅重要通知'],
      success: (res) => {
        const options = ['开启推送通知', '关闭推送通知', '仅重要通知'];
        Message.success({
          context: this,
          offset: [20, 32],
          duration: 2000,
          content: `已设置为：${options[res.tapIndex]}`
        });
      }
    });
  },

  /**
   * 隐私协议
   */
  showPrivacySettings() {
    wx.navigateTo({
      url: '/pages/privacy-agreement/index?showActions=true&isFirstTime=false',
      fail: (error) => {
        console.error('跳转协议页面失败:', error);
        // 降级到弹窗模式
        this.showPrivacyModal();
      }
    });
  },

  /**
   * 隐私协议弹窗（降级方案）
   */
  showPrivacyModal() {
    const privacyContent = `📖 书海拾贝 隐私协议

【用户责任声明】
1. 用户上传的所有内容均由用户本人创建和提供。
2. 用户承诺内容不侵犯他人权益，符合法律法规。
3. 用户对上传内容承担全部法律责任。

【平台免责声明】
1. 本平台仅提供信息存储和分享服务。
2. 因用户内容引起的纠纷，平台不承担责任。
3. 平台有权删除违规内容。

感谢您对书海拾贝的信任与支持！`;

    wx.showModal({
      title: '📋 隐私协议',
      content: privacyContent,
      showCancel: true,
      cancelText: '我已了解',
      confirmText: '重新确认',
      success: (res) => {
        if (res.confirm) {
          this.recordPrivacyAgreement();
        } else {
          Message.info({
            context: this,
            offset: [20, 32],
            duration: 2000,
            content: '您可以随时查看隐私协议'
          });
        }
      }
    });
  },

  /**
   * 记录隐私协议同意
   */
  async recordPrivacyAgreement() {
    try {
      wx.showLoading({
        title: '记录中...',
        mask: true
      });

      const agreementData = {
        userId: wx.getStorageSync('userId'),
        agreementType: 'privacy', // 协议类型
        agreementVersion: '1.0', // 协议版本
        agreedAt: new Date().toISOString(), // 同意时间
        userAgent: wx.getSystemInfoSync().platform, // 用户设备信息
        appVersion: '1.0.0' // 应用版本
      };

      // 本地存储（作为备份）
      wx.setStorageSync('privacyAgreementTime', agreementData.agreedAt);
      wx.setStorageSync('privacyAgreementVersion', agreementData.agreementVersion);

      // 调用后端API记录协议同意
      try {
        const response = await userProfileAPI.recordUserAgreement(agreementData);
        
        if (response.code === 200) {
          // 协议同意记录已保存到后端数据库
        } else {
          console.warn('后端记录协议同意失败:', response.message);
        }
      } catch (apiError) {
        console.warn('调用后端API失败，但本地记录已保存:', apiError);
        // 即使后端API失败，也不影响用户体验，因为已经本地保存
      }

      wx.hideLoading();
      Message.success({
        context: this,
        offset: [20, 32],
        duration: 2000,
        content: '感谢您同意我们的隐私协议'
      });

    } catch (error) {
      wx.hideLoading();
      console.error('记录协议同意失败:', error);
      Message.error({
        context: this,
        offset: [20, 32],
        duration: 2000,
        content: '记录失败，请重试'
      });
    }
  },

  /**
   * 关于我们
   */
  goAbout() {
    wx.showModal({
      title: '关于书海拾贝',
      content: '书海拾贝是一款专注于阅读分享的小程序\n\n版本：v1.0.0\n开发者：BookOcean团队',
      showCancel: false,
      confirmText: '知道了'
    });
  },

  /**
   * 清除缓存
   */
  clearCache() {
    wx.showModal({
      title: '清除缓存',
      content: '确定要清除所有缓存数据吗？这将删除：\n• 图片缓存\n• 临时文件\n• 页面缓存\n\n登录信息将被保留',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '清理中...',
            mask: true
          });

          try {
            // 1. 保存重要的用户数据
            const userInfo = this.data.userInfo;
            const userId = wx.getStorageSync('userId');
            const accessToken = wx.getStorageSync('access_token');
            const openid = wx.getStorageSync('openid');
            const privacyLevel = wx.getStorageSync('privacyLevel');
            
            // 2. 清除所有存储
            wx.clearStorageSync();
            
            // 3. 恢复重要数据
            if (userInfo) wx.setStorageSync('userInfo', userInfo);
            if (userId) wx.setStorageSync('userId', userId);
            if (accessToken) wx.setStorageSync('access_token', accessToken);
            if (openid) wx.setStorageSync('openid', openid);
            if (privacyLevel !== null) wx.setStorageSync('privacyLevel', privacyLevel);
            
            // 4. 清除文件缓存（如果有API支持）
            this.clearFileCache();
            
            // 5. 清除图片缓存
            this.clearImageCache();
            
            wx.hideLoading();
            Message.success({
              context: this,
              offset: [20, 32],
              duration: 2000,
              content: '缓存清除成功，已释放存储空间'
            });
            
            // 6. 统计清理效果
            this.showCacheInfo();
            
          } catch (error) {
            wx.hideLoading();
            console.error('清除缓存失败:', error);
            Message.error({
              context: this,
              offset: [20, 32],
              duration: 2000,
              content: '清除缓存失败，请重试'
            });
          }
        }
      }
    });
  },

  /**
   * 清除文件缓存
   */
  clearFileCache() {
    try {
      // 获取临时文件目录
      const fs = wx.getFileSystemManager();
      
      // 清除临时文件（微信小程序会自动管理，这里主要是示意）
      
      // 可以添加具体的文件清理逻辑
      // fs.readdir({
      //   dirPath: wx.env.USER_DATA_PATH,
      //   success: (res) => {
      //     // 清理用户数据目录下的临时文件
      //   }
      // });
    } catch (error) {
      console.error('清除文件缓存失败:', error);
    }
  },

  /**
   * 清除图片缓存
   */
  clearImageCache() {
    try {
      // 微信小程序的图片缓存由系统自动管理
      // 这里主要是清除我们自己缓存的图片URL等
      
      // 可以添加具体的图片缓存清理逻辑
      // 例如：清除已下载的图片文件引用
    } catch (error) {
      console.error('清除图片缓存失败:', error);
    }
  },

  /**
   * 显示缓存信息
   */
  showCacheInfo() {
    try {
      // 获取存储使用情况
      wx.getStorageInfo({
        success: (res) => {
          const usedSize = (res.currentSize / 1024).toFixed(2);
          const limitSize = (res.limitSize / 1024).toFixed(2);
          
          setTimeout(() => {
            Message.info({
              context: this,
              offset: [20, 32],
              duration: 3000,
              content: `存储使用：${usedSize}KB / ${limitSize}KB`
            });
          }, 2500);
        },
        fail: (error) => {
          console.error('获取存储信息失败:', error);
        }
      });
    } catch (error) {
      console.error('显示缓存信息失败:', error);
    }
  },

  /**
   * 退出登录
   */
  logout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？退出后需要重新登录才能使用完整功能。',
      success: (res) => {
        if (res.confirm) {
          try {
            // 清除所有登录相关数据
            wx.clearStorageSync();
            
            // 重置全局数据
            const app = getApp();
            app.globalData.userInfo = null;
            app.globalData.userProfile = null;
            app.globalData.userId = null;
            app.globalData.openid = null;
            
            Message.success({
              context: this,
              offset: [20, 32],
              duration: 1500,
              content: '已退出登录'
            });
            
            // 延迟跳转到登录页
            setTimeout(() => {
              wx.reLaunch({
                url: '/pages/login/login'
              });
            }, 1500);
          } catch (error) {
            Message.error({
              context: this,
              offset: [20, 32],
              duration: 2000,
              content: '退出登录失败'
            });
          }
        }
      }
    });
  }
});
